package es.gesfutbol.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.criterion.Restrictions;
import org.springframework.transaction.annotation.Transactional;

import es.gesfutbol.domini.implementacio.Arbitre;
import es.gesfutbol.domini.implementacio.EstadisticaArbitre;
import es.gesfutbol.domini.implementacio.IdEstadisticaArbitre;
import es.gesfutbol.domini.implementacio.Partit;
import es.gesfutbol.util.HibernateDao;
import es.gesfutbol.util.HibernateHelper;

public class EstadisticaArbitreDao extends HibernateDao<EstadisticaArbitre, IdEstadisticaArbitre> implements IEstadisticaArbitreDao{

	@Transactional(readOnly = false)
	public void saveOrUpdate(EstadisticaArbitre estadisticaArbitre) {
		this.getSessionFactory().getCurrentSession().saveOrUpdate(estadisticaArbitre);		
	}
	
	@SuppressWarnings("unchecked")
	@Override
	@Transactional(readOnly = true)
	public List<EstadisticaArbitre> findByIdPartit(Long idPartit) {
		return this.getSessionFactory().getCurrentSession().createCriteria(EstadisticaArbitre.class)
				.add(Restrictions.eq("id.partit.idPartit", idPartit)).list();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	@Transactional(readOnly = true)
	public List<EstadisticaArbitre> findByIdPartitDeproxy(Long idPartit) {
		
		List<EstadisticaArbitre> estadisticaArbitre =  this.getSessionFactory().getCurrentSession().createCriteria(EstadisticaArbitre.class)
			.add(Restrictions.eq("id.partit.idPartit", idPartit)).list();
		
		List<EstadisticaArbitre> estadisticaArbitreDeproxy = null;
		
		if(estadisticaArbitre!=null && estadisticaArbitre.size()>0){
			estadisticaArbitreDeproxy = new ArrayList<EstadisticaArbitre>();
			for(EstadisticaArbitre j : estadisticaArbitre){
				estadisticaArbitreDeproxy.add(deproxy(j));
			}
		}
		return estadisticaArbitreDeproxy;
	}
	
	@Override
	public EstadisticaArbitre deproxy(EstadisticaArbitre estadisticaArbitre) {
		
		//Deproxy de l'arbitre.
		Arbitre arbitre = estadisticaArbitre.getId().getArbitre();
		Hibernate.initialize(arbitre);
		arbitre = HibernateHelper.deproxy(arbitre, Arbitre.class);
		estadisticaArbitre.getId().setArbitre(arbitre);
		
		//Deproxy del Partit.
		Partit partit = estadisticaArbitre.getId().getPartit();
		Hibernate.initialize(partit);
		partit = HibernateHelper.deproxy(partit, Partit.class);
		estadisticaArbitre.getId().setPartit(partit);
		
		return estadisticaArbitre;
	}
	
}
